<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 面向对象三个重要概念:
        //  封装  继承   多态 
        //  原型链 就是为了继承  


        // class Person{
        //     constructor(name,age){
        //         this.name = name;
        //         this.age = age;
        //     }

        //     eat(){
        //         console.log(this.name+'正在吃')
        //     }
        // }

        function Person(name,age){
            this.name = name;
            this.age = age;
        }
        Person.prototype.eat = function(){
            console.log(this.name+'正在吃')
        }

        const p1 = new Person('张三',19);

        // console.log(p1);

        // 函数属性prototype有个指针 指向原型对象 也就是说 是个对象 
        // 构造函数也是函数  
        // 任何对象的构造函数是 Object
        // 任何函数的构造函数 Function
        // 任何对象的__proto__ 指向所属构造函数的prototype 
        // 万物皆对象  


        // 问题1: p1的__proto__是谁?
        // console.log(p1.__proto__ === Person.prototype);
        // 因为 p1的构造函数是Person
        // p1是对象  
        // 任何对象的__proto__ 指向所属构造函数的prototype


        // 问题2: Person的__proto__是谁?
        // Person是构造函数  本质是函数  
        // 函数的构造函数  Function 
        // 函数也是对象  
        // 任何对象的__proto__ 指向所属构造函数的prototype

        // console.log( Person.__proto__ === Function.prototype);


        
        //问题3 : Person.prototype的__proto__是谁?
        // Person.prototype 是个对象 
        // 对象的构造函数是  Object
        // 任何对象的__proto__ 指向所属构造函数的prototype
        // console.log(Person.prototype.__proto__ === Object.prototype);

        // 问题4: Function的__proto__是谁?
        // Function 是内置构造函数  本质是函数   
        // 函数也是对象  
        // 函数的构造函数是 Function 
        // 任何对象的__proto__ 指向所属构造函数的prototype
        // console.log(Function.__proto__ === Function.prototype)
        // 问题5: Function.prototype的__proto__是谁?
        // Function.prototype 是个对象 
        // 对象的 构造函数是 Object
        // 所以 Function.prototype 是 Object
        // // 任何对象的__proto__ 指向所属构造函数的prototype
        // console.log( Function.prototype.__proto__ === Object.prototype)
        // 问题6: Object的__proto__是谁?
        // Object 是个内置构造函数  
        // 函数是个对象   构造函数是Function
        // 任何对象的__proto__ 指向所属构造函数的prototype

        //  console.log( Object.__proto__ === Function.prototype);
        // 问题7: Object.prototype的__proto__是谁?
        // 万物皆对象  
        // Object.prototype 原型顶端  顶级原型  
        // 所以上面再也没有构造函数了  
        // console.log( Object.prototype.__proto__); // null
    </script>
</body>
</html>